package com.neko.Thread_Learning.t16_No_synchronized_Demo;

import java.util.ArrayList;

/**
 * 16-3、Thread 不安全 的 Collections - ArrayList
 * */
public class ThreadSafeList {
    public static void main(String[] args) {

        // Thread 不安全 の List
        ArrayList<String> list1 = new ArrayList<String>();

//        Vector<String> strings = new Vector<>();
//        List<String> strings = Collections.synchronizedList(list1);

        /**
         * 原因在 for，同一时间下，多线程 new Thread 操作了List的同一个位置
         *  以致于List 某几个位置，被覆写了
         * */
        for (int i=0; i<10000; i++) {
            new Thread( () -> {
                synchronized (list1) { // 一定要搭配 Thread.sleep(int ms)，不然数据还是会错误
                    list1.add(Thread.currentThread().getName());
                }
            }).start();
        }

//        放大问题，如果加入了 Thread.sleep(2000) 还是数据错误，则证明代码有问题

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(list1.size());
    }

}
